home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 113_01 / a68tbls.asm < prev    next >
Assembly Source File  |  1985-03-09  |  13KB  |  571 lines

  1.     TITLE    'MACHINE LANGUAGE FUNCTIONS FOR 6800/6801 CROSS-ASSEMBLER V2.5'
  2.     PAGE    60
  3. ;
  4. ;    6800 CROSS-ASSEMBLER  V. 2.5
  5. ;
  6. ;    MAY, 1980
  7. ;
  8. ;    JULY, 1980 -- REV. 2.2 CONSISTING OF FIXING THE M ERRORS THAT
  9. ;        COME FROM FORWARD REFERENCES IN FDB AND FCB PSEUDO-OPS.
  10. ;
  11. ;    OCTOBER, 1980 -- REV. 2.3 CONSISTING OF UPDATING THE ASSEMBLY
  12. ;        LANGUAGE FILE AND I/O ROUTINES TO MATCH AND TAKE
  13. ;        ADVANTAGE OF BDS C V1.4.
  14. ;
  15. ;    OCTOBER, 1983 -- REV. 2.4 CONSISTING OF ADDING THE CPU PSEUDO-OP,
  16. ;        ADDING THE 6801 CPU'S EXTRA OPCODES, AND SPEEDING UP THE
  17. ;        CODE A BIT.
  18. ;
  19. ;    SEPTEMBER, 1984 -- REV. 2.5 CONSISTING OF FIXING BUGS WITH THE SYMBOL
  20. ;        TABLE SORT, THE WRITING OF FILES TO SPECIFIED DRIVES, AND THE
  21. ;        HANDLING OF BLANK INPUT LINES.
  22. ;
  23. ;    COPYRIGHT (C) 1980,83,84 WILLIAM C. COLLEY, III.
  24. ;
  25. ;FILE:    A68TBLS.ASM
  26. ;
  27. ;MACHINE LANGUAGE FUNCTIONS.
  28. ;
  29.     MACLIB    CMAC
  30. ;
  31. ; THE DIRECTORY TO THE FUNCTIONS IN THIS CRL FILE:
  32. ;
  33.     DIRECT
  34.     DEFINE    GETOPC        ;FIRST ENTRY.
  35.     DEFINE    NUMOPCS        ;SECOND ENTRY.
  36.     DEFINE    GETATTR        ;THIRD ENTRY.
  37.     DEFINE    GETOPR        ;FOURTH ENTRY.
  38.     DEFINE    NUMOPRS        ;FIFTH ENTRY.
  39.     ENDDIR
  40. ;
  41. ;ARGUEMENTS ARE PASSED THROUGH OFFSETS FROM THE STACK POINTER.
  42. ;THEY ARE DEFINED AS FOLLOWS:
  43. ;
  44. ARG0    EQU    2        ;FIRST ARGUEMENT.
  45. ARG1    EQU    4        ;SECOND ARGUEMENT.
  46. ARG2    EQU    6        ;THIRD ARGUEMENT.
  47. ARG3    EQU    8        ;FOURTH ARGUEMENT.
  48. ;
  49.     PAGE
  50. ;
  51. ;THIS FUNCTION GETS OPCODE NUMBER NUM FROM THE OPCODE TABLE.  THE FUNCTION
  52. ;RETURNS 0 IF THE OPCODE WAS NOT FOUND, 1 IF IT WAS.
  53. ;
  54. ;FUNCTION IS CALLED AS FOLLOWS:
  55. ;
  56. ;    GETOPC(NUM,OPCODE,VALUE,ATTRIB);
  57. ;
  58. ;    NUM    CHARACTER CONTAINING THE NUMBER OF THE DESIRED ENTRY.
  59. ;            0 REPRESENTS THE FIRST ENTRY IN THE TABLE.  THE
  60. ;            TABLE IS IN ALPHABETICAL ORDER FOR THE BENEFIT
  61. ;            OF THE BINARY SEARCHING ROUTINE (WRITTEN IN C).
  62. ;    OPCODE    POINTER TO A 5-CHARACTER ARRAY WHICH WILL RECEIVE THE
  63. ;            OPCODE'S NAME (NULL TERMINATED).
  64. ;    VALUE    POINTER TO A CHARACTER THAT WILL RECEIVE THE OPCODE'S
  65. ;            VALUE.
  66. ;    ATTRIB    POINTER TO A CHARACTER THAT WILL RECEIVE THE OPCODE'S
  67. ;            ATTIBUTE BYTE.
  68. ;
  69. NUM    EQU    ARG0
  70. OPCODE    EQU    ARG1
  71. VALUE    EQU    ARG2
  72. ATTRIB    EQU    ARG3
  73. ;
  74.     PRELUDE    GETOPC
  75. ;
  76.     LXI    H, NUM        ;GET ENTRY NUMBER IN TABLE.
  77.     DAD    SP
  78.     MOV    A,M
  79.     CPI    OPTBLL        ;ENTRY IN TABLE?
  80.     LXI    H, 0        ;IF NOT, RETURN 0.
  81.     RNC
  82. ;
  83.     MOV    L,A        ;FIND ENTRY BY COMPUTING
  84.     DAD    H        ;(6 * NUM) + TABLE BASE.
  85.     MOV    E,L
  86.     MOV    D,H
  87.     DAD    H
  88.     DAD    D
  89.     RELOC    <LXI D,>,OPCTBL
  90.     DAD    D
  91.     MOV    E,L
  92.     MOV    D,H
  93. ;
  94.     LXI    H, OPCODE    ;FIND OPCODE RETURN AREA.
  95.     DAD    SP
  96.     MOV    A,M
  97.     INX    H
  98.     MOV    H,M
  99.     MOV    L,A
  100. ;
  101.     PUSH    B        ;MOVE OPCODE OUT TO RETURN AREA.
  102.     MVI    C, 4
  103. MOVOPC:    LDAX    D
  104.     INX    D
  105.     MOV    M,A
  106.     INX    H
  107.     DCR    C
  108.     RELOC    JNZ,MOVOPC
  109.     POP    B
  110. ;
  111.     MVI    M, 0        ;TERMINATE OPCODE.
  112. ;
  113.     LXI    H, ATTRIB    ;FIND ATTRIBUTE RETURN AREA.
  114.     DAD    SP
  115.     MOV    A,M
  116.     INX    H
  117.     MOV    H,M
  118.     MOV    L,A
  119. ;
  120.     LDAX    D        ;MOVE ATTRIBUTE TO RETURN AREA.
  121.     INX    D
  122.     MOV    M,A
  123. ;
  124.     LXI    H, VALUE    ;FIND VALUE RETURN AREA.
  125.     DAD    SP
  126.     MOV    A,M
  127.     INX    H
  128.     MOV    H,M
  129.     MOV    L,A
  130. ;
  131.     LDAX    D        ;MOVE VALUE TO RETURN AREA.
  132.     MOV    M,A
  133. ;
  134.     LXI    H, 1        ;RETURN 1 FOR SUCCESSFUL GET.
  135.     RET
  136. ;
  137. ;THE OPCODE TABLE ITSELF:
  138. ;
  139. ;    EACH ENTRY HAS A FOUR-BYTE NAME, A ONE-BYTE ATTRIBUTE,
  140. ;    AND A ONE-BYTE VALUE.  THE VALUE IS THE LOWEST
  141. ;    NUMBERED OPCODE HAVING THAT NAME.
  142. ;
  143. ;    THE ATTRIBUTE BYTE BITS ARE ALLOCATED AS FOLLOWS:
  144. ;
  145. ;        7 = PSEUDO-OP.
  146. ;        6 = IF NOT PSEUDO-OP, DIRECT ADDRESSING ALLOWED.
  147. ;            IF PSEUDO-OP, IF GROUP (NO LABEL ALLOWED).
  148. ;        5 = RELATIVE ADDRESSING.
  149. ;        4 = REGISTER (A,B) MUST BE SPECIFIED.
  150. ;        3 = 16-BIT IMMEDIATE ADDRESSING ALLOWED.
  151. ;        2 = 8-BIT IMMEDIATE ADDRESSING ALLOWED.
  152. ;        1 = INDEXED OR EXTENDED ADDRESSING ALLOWED.
  153. ;        0 = REGISTER (A,B) MAY BE SPECIFIED.
  154. ;
  155. ;    BITS 4 AND 0 WILL NEVER OCCUR TOGETHER BECAUSE THE REGISTER (A,B)
  156. ;    SPECIFICATION IS EITHER FORBIDDEN, OPTIONAL, OR REQUIRED.  BOTH BITS
  157. ;    SET IS USED TO INDICATE AN OPCODE THAT IS ONLY VALID FOR THE 6801
  158. ;    CPU.  WHEN THE LINE ASSEMBLY ROUTINE FINDS BOTH BITS SET, IT CHECKS
  159. ;    WHETHER OR NOT 6801 OPCODES ARE ENABLED, THEN CLEARS BOTH BITS.  IN
  160. ;    ADDITION, IF THE 6801 OPCODES ARE ENABLED, THE LINE ASSEMBLY ROUTINE
  161. ;    CONVERTS THE ATTRIBUTE BYTE OF THE JSR OPCODE FROM 02H TO 42H.
  162. ;
  163. OPCTBL:    DB    'ABA', 0,    0,    1BH
  164.     DB    'ABX', 0,    11H,    3AH
  165.     DB    'ADC', 0,    56H,    89H
  166.     DB    'ADCA',        46H,    89H
  167.     DB    'ADCB',        46H,    0C9H
  168.     DB    'ADD', 0,    56H,    8BH
  169.     DB    'ADDA',        46H,    8BH
  170.     DB    'ADDB',        46H,    0CBH
  171.     DB    'ADDD',        5BH,    0C3H
  172.     DB    'AND', 0,    56H,    84H
  173.     DB    'ANDA',        46H,    84H
  174.     DB    'ANDB',        46H,    0C4H
  175.     DB    'ASL', 0,    03H,    48H
  176.     DB    'ASLA',        0,    48H
  177.     DB    'ASLB',        0,    58H
  178.     DB    'ASLD',        11H,    05H
  179.     DB    'ASR', 0,    03H,    47H
  180.     DB    'ASRA',        0,    47H
  181.     DB    'ASRB',        0,    57H
  182.     DB    'BCC', 0,    20H,    24H
  183.     DB    'BCS', 0,    20H,    25H
  184.     DB    'BEQ', 0,    20H,    27H
  185.     DB    'BGE', 0,    20H,    2CH
  186.     DB    'BGT', 0,    20H,    2EH
  187.     DB    'BHI', 0,    20H,    22H
  188.     DB    'BHS', 0,    20H,    24H
  189.     DB    'BIT', 0,    56H,    85H
  190.     DB    'BITA',        46H,    85H
  191.     DB    'BITB',        46H,    0C5H
  192.     DB    'BLE', 0,    20H,    2FH
  193.     DB    'BLO', 0,    20H,    25H
  194.     DB    'BLS', 0,    20H,    23H
  195.     DB    'BLT', 0,    20H,    2DH
  196.     DB    'BMI', 0,    20H,    2BH
  197.     DB    'BNE', 0,    20H,    26H
  198.     DB    'BPL', 0,    20H,    2AH
  199.     DB    'BRA', 0,    20H,    20H
  200.     DB    'BRN', 0,    31H,    21H
  201.     DB    'BSR', 0,    20H,    8DH
  202.     DB    'BVC', 0,    20H,    28H
  203.     DB    'BVS', 0,    20H,    29H
  204.     DB    'CBA', 0,    0,    11H
  205.     DB    'CLC', 0,    0,    0CH
  206.     DB    'CLI', 0,    0,    0EH
  207.     DB    'CLR', 0,    03H,    4FH
  208.     DB    'CLRA',        0,    4FH
  209.     DB    'CLRB',        0,    5FH
  210.     DB    'CLV', 0,    0,    0AH
  211.     DB    'CMP', 0,    56H,    81H
  212.     DB    'CMPA',        46H,    81H
  213.     DB    'CMPB',        46H,    0C1H
  214.     DB    'COM', 0,    03H,    43H
  215.     DB    'COMA',        0,    43H
  216.     DB    'COMB',        0,    53H
  217.     DB    'CPU', 0,    80H,    0BH
  218.     DB    'CPX', 0,    4AH,    8CH
  219.     DB    'DAA', 0,    0,    19H
  220.     DB    'DEC', 0,    03H,    4AH
  221.     DB    'DECA',        0,    4AH
  222.     DB    'DECB',        0,    5AH
  223.     DB    'DES', 0,    0,    34H
  224.     DB    'DEX', 0,    0,    09H
  225.     DB    'ELSE',     0C0H,    07H
  226.     DB    'END', 0,    80H,    06H
  227.     DB    'ENDI',        0C0H,    08H
  228.     DB    'EOR', 0,    56H,    88H
  229.     DB    'EORA',        46H,    88H
  230.     DB    'EORB',        46H,    0C8H
  231.     DB    'EQU', 0,    80H,    01H
  232.     DB    'FCB', 0,    80H,    02H
  233.     DB    'FCC', 0,    80H,    04H
  234.     DB    'FDB', 0,    80H,    03H
  235.     DB    'IF', 0, 0,    0C0H,    09H
  236.     DB    'INC', 0,    03H,    4CH
  237.     DB    'INCA',        0,    4CH
  238.     DB    'INCB',        0,    5CH
  239.     DB    'INS', 0,    0,    31H
  240.     DB    'INX', 0,    0,    08H
  241.     DB    'JMP', 0,    02H,    4EH
  242.     DB    'JSR', 0,    02H,    8DH
  243.     DB    'LDA', 0,    56H,    86H
  244.     DB    'LDAA',        46H,    86H
  245.     DB    'LDAB',        46H,    0C6H
  246.     DB    'LDD', 0,    5BH,    0CCH
  247.     DB    'LDS', 0,    4AH,    8EH
  248.     DB    'LDX', 0,    4AH,    0CEH
  249.     DB    'LSL', 0,    03H,    48H
  250.     DB    'LSLA',        0,    48H
  251.     DB    'LSLB',        0,    58H
  252.     DB    'LSLD',        11H,    05H
  253.     DB    'LSR', 0,    03H,    44H
  254.     DB    'LSRA',        0,    44H
  255.     DB    'LSRB',        0,    54H
  256.     DB    'LSRD',        11H,    04H
  257.     DB    'MUL', 0,    11H,    3DH
  258.     DB    'NEG', 0,    03H,    40H
  259.     DB    'NEGA',        0,    40H
  260.     DB    'NEGB',        0,    50H
  261.     DB    'NOP', 0,    0,    01H
  262.     DB    'ORA', 0,    56H,    8AH
  263.     DB    'ORAA',        46H,    8AH
  264.     DB    'ORAB',        46H,    0CAH
  265.     DB    'ORG', 0,    80H,    00H
  266.     DB    'PSH', 0,    10H,    36H
  267.     DB    'PSHA',        0,    36H
  268.     DB    'PSHB',        0,    37H
  269.     DB    'PSHX',        11H,    3CH
  270.     DB    'PUL', 0,    10H,    32H
  271.     DB    'PULA',        0,    32H
  272.     DB    'PULB',        0,    33H
  273.     DB    'PULX',        11H,    38H
  274.     DB    'RMB', 0,    80H,    05H
  275.     DB    'ROL', 0,    03H,    49H
  276.     DB    'ROLA',        0,    49H
  277.     DB    'ROLB',        0,    59H
  278.     DB    'ROR', 0,    03H,    46H
  279.     DB    'RORA',        0,    46H
  280.     DB    'RORB',        0,    56H
  281.     DB    'RTI', 0,    0,    3BH
  282.     DB    'RTS', 0,    0,    39H
  283.     DB    'SBA', 0,    0,    10H
  284.     DB    'SBC', 0,    56H,    82H
  285.     DB    'SBCA',        46H,    82H
  286.     DB    'SBCB',        46H,    0C2H
  287.     DB    'SEC', 0,    0,    0DH
  288.     DB    'SEI', 0,    0,    0FH
  289.     DB    'SET', 0,    80H,    0AH
  290.     DB    'SEV', 0,    0,    0BH
  291.     DB    'STA', 0,    52H,    87H
  292.     DB    'STAA',        42H,    87H
  293.     DB    'STAB',        42H,    0C7H
  294.     DB    'STD', 0,    53H,    0CDH
  295.     DB    'STS', 0,    42H,    08FH
  296.     DB    'STX', 0,    42H,    0CFH
  297.     DB    'SUB', 0,    56H,    80H
  298.     DB    'SUBA',        46H,    80H
  299.     DB    'SUBB',        46H,    0C0H
  300.     DB    'SUBD',        5BH,    83H
  301.     DB    'SWI', 0,    0,    3FH
  302.     DB    'TAB', 0,    0,    16H
  303.     DB    'TAP', 0,    0,    06H
  304.     DB    'TBA', 0,    0,    17H
  305.     DB    'TPA', 0,    0,    07H
  306.     DB    'TST', 0,    03H,    4DH
  307.     DB    'TSTA',        0,    4DH
  308.     DB    'TSTB',        0,    5DH
  309.     DB    'TSX', 0,    0,    30H
  310.     DB    'TXS', 0,    0,    35H
  311.     DB    'WAI', 0,    0,    3EH
  312. ;
  313. OPTBLL    EQU    ($-OPCTBL)/6    ;CALCULATE LENGTH OF TABLE.
  314. ;
  315.     POSTLUDE GETOPC
  316. ;
  317.     PAGE
  318. ;
  319. ;THIS FUNCTION RETURNS THE NUMBER OF OPCODES IN THE OPCODE TABLE
  320. ;FOR THE BENEFIT OF THE BINARY SEARCHING ROUTINE (WRITTEN IN C).
  321. ;
  322. ;THIS FUNCTION IS CALLED AS FOLLOWS:
  323. ;
  324. ;    NUMOPCS();
  325. ;
  326.     PRELUDE    NUMOPCS
  327. ;
  328.     LXI    H, OPTBLL    ;RETURN NUMBER OF OPCODES.
  329.     RET
  330. ;
  331.     POSTLUDE NUMOPCS
  332. ;
  333.     PAGE
  334. ;
  335. ;THIS FUNCTION REMOVES THE PARITY BIT FROM ITS ARGUMENT AND LOOKS IT UP IN
  336. ;A TABLE.  THE TABLE CLASSIFIES THE CHARACTER INTO ONE OF THE FOLLOWING BINS
  337. ;RETURNING THE APPROPRIATE CODE.
  338. ;
  339. ALPHA    EQU    0    ;ALPHABETIC.
  340. NUMERC    EQU    1    ;NUMERIC (